using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;
using ProductManagement.Services;
using ProductManagement.Views;

namespace ProductManagement
{
    //模块实现IModule接口，prism主程序加载模块，为主程序指定的Region动态分配模块内容
    //应用程序模块后，每个子模块中的视图可以独立的进行依赖注入。
    public class ProductManagementModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            // 模块初始化后的操作
            // Resolve方法从容器里面拿到实例
            var regionManager = containerProvider.Resolve<IRegionManager>();
            // 可以在这里进行一些初始化工作，比如导航。当然导航也可以放到主程序中。
            // regionManager.RequestNavigate("regionName","viewName");
            // regionManager.Regions["regionName"].RequestNavigate("viewName");
            // 这种方法没用到导航服务，不需要先注册视图用于导航
            // regionManager.RegisterViewWithRegion("ExcelRegion", typeof(ExcelTest));
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // 注册模块需要的服务
            containerRegistry.RegisterSingleton<IProductService, ProductService>();
            // 注册视图用于导航，只有将视图注入到容器才能够用于导航，并且可以添加别名
            containerRegistry.RegisterForNavigation<ProductListView>();
            containerRegistry.RegisterForNavigation<AddProductView>();
            containerRegistry.RegisterForNavigation<ProductDetailView>();
            //添加别名 "CustomName"
            // containerRegistry.RegisterForNavigation<ViewA>("CustomName");
            //默认名称 "ViewB"
            //containerRegistry.RegisterForNavigation<ViewB>();
            //指定ViewModel，如果不指定ViewModel就自动绑定默认命名规则的ViewModel
            //containerRegistry.RegisterForNavigation<ViewA,ViewAViewModel>();
            //注册时指定ViewMode并指定别名
            //containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>("ViewAVM");
        }
    }
}